package br.com.tcm.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.com.tcm.entity.Usuario;

public class UsuarioDAO {

	private Connection con = null;
	
	public UsuarioDAO() {
		this.con = new ConnectionFactory().getConnection();
	}
	
	public void insertUsuario(Usuario usuario) {
        try {
            String sql = "insert into usuario (loginUsuario,senhaUsuario,nomeUsuario,idEmpresa,nuRamal,idSetor) values (?,?,?,?,?,?)";
            PreparedStatement pst = con.prepareStatement(sql);
            pst.setString(1, usuario.getLoginUsuario());
            pst.setString(2, usuario.getSenhaUsuario());
            pst.setString(3, usuario.getNomeUsuario());
            pst.setInt(4, usuario.getIdEmpresa());
            pst.setInt(5, usuario.getNuRamal());
            pst.setInt(6, usuario.getIdSetor());
            pst.execute();
            pst.close();
            System.out.println("Usuario Gravado.");
        } catch (SQLException e) {
            throw new RuntimeException("Erro ao inserir usuario.");
        }
    }
    
    public void updateUsuario(Usuario usuario) {
    	try {
			String sql = "update usuario set loginUsuario = ?, senhaUsuario = ?, nomeUsuario = ?, idEmpresa = ?, nuRamal = ?, idSetor = ? where idUsuario = ?";
			PreparedStatement pst = con.prepareStatement(sql);
            pst.setString(1, usuario.getLoginUsuario());
            pst.setString(2, usuario.getSenhaUsuario());
            pst.setString(3, usuario.getNomeUsuario());
            pst.setInt(4, usuario.getIdEmpresa());
            pst.setInt(5, usuario.getNuRamal());
            pst.setInt(6, usuario.getIdSetor());
            pst.setInt(7, usuario.getIdUsuario());
			pst.execute();
			pst.close();
			System.out.println("Usuario Atualizado.");
		} catch (SQLException e) {
			throw new RuntimeException("Erro ao fazer update no usuario.");
		}
    }
    
    public void deleteUsuario(Usuario usuario) {
    	try {
			String sql = "delete from usuario where idUsuario = ?";
			PreparedStatement pst = con.prepareStatement(sql);
			pst.setInt(1, usuario.getIdUsuario());
			pst.execute();
			pst.close();
			System.out.println("Usuario Apagado.");
		} catch (SQLException e) {
			throw new RuntimeException("Erro ao apagar o usuario.");
		}
    }
    
    public List<Usuario> findAll() {
    	List<Usuario> usuarioList = new ArrayList<Usuario>();
    	try {
			String sql = "select * from usuario";
			PreparedStatement pst = con.prepareStatement(sql);
			ResultSet rs = pst.executeQuery();
			while (rs.next()) {
				Usuario usuario = new Usuario();
				usuario.setIdUsuario(rs.getInt("idUsuario"));
				usuario.setLoginUsuario(rs.getString("loginUsuario"));
				usuario.setSenhaUsuario(rs.getString("senhaUsuario"));
				usuario.setNomeUsuario(rs.getString("nomeUsuario"));
				usuario.setIdEmpresa(rs.getInt("idEmpresa"));
				usuario.setNuRamal(rs.getInt("nuRamal"));
				usuario.setIdSetor(rs.getInt("idSetor"));
				usuarioList.add(usuario);
			}
			pst.close();
			System.out.println("Usuario listado com sucesso.");
		} catch (SQLException e) {
			throw new RuntimeException("Erro ao listar o usuario.");
		}
    	
    	return usuarioList;
    }
	
}
